package com.zcsy.manage.service.system;

import java.util.List;

import com.zcsy.manage.model.base.CellInfo;
import com.zcsy.manage.model.system.Menu;
import com.zcsy.manage.model.system.Role;
import com.zcsy.manage.model.system.RoleUser;

/**
 * @Title: IRoleService.java
 * @Package： com.zcsy.shop.service 
 * @Description: 角色相关服务层接口类
 *
 * @author tanghan barbadosliy@163.com
 * @Copyright: 2015 武汉中财数元信息技术有限公司 All rights reserved.
 * @date 2015年7月7日
 * @version 1.0
 * @see JDK1.7.0_75
 * @since
 */
public interface IRoleService {
	
	/**
	 * @Title: getAll
	 * @Description: 获取角色列表
	 * @return List<Role> 菜单集合
	 * @throws none
	 */
	List<Role> getAll();
   
   /** 
	 * @Title: getRoles 
	 * @Description: 根据条件获取角色列表
	 * @param @param type 角色类型
	 * @param @param map
	 * @param @return     
	 * @return List<Role>     
	 * @throws 
	 */
	public List<Role> getRoles(Integer type , String name);
   
   /**
     * @Title: insert
     * @Description: 新增方法
     * @param record  新增对象
     * @return int  新增结果
     * @throws  none
     */
	int insert(Role record);
   
   /**
     * @Title: updateByPrimaryKey
     * @Description: 根据Id，更新角色
     * @param record  待修改对象(id不为空)
     * @return int  新增结果
     * @throws  none
     */
	int updateByPrimaryKey(Role record);
   
   /**
     * Description: <br>
     *  更新角色菜单
     * @param roleId
     * @param menus 
     * @see 
     */
	void updateRoleMenu(String roleId,String[] menus);
   
   /**
     * Description: <br>
     *     根据角色Id获取用户初次加载菜单
     * @param roleId 角色Id
     * @return  菜单对象
     * @see 
     */
	Menu getEnterUrlByRoleId(String roleId);
    
    /**
     * 根据角色Id得到角色信息
     * @param roleId
     * @return
     */
    Role getRole(String roleId);
    
	/**
	 * Description: <br>
	 *   清空对应角色的权限
	 * @param roleId
	 * @return 
	 * @see 
	 */
	int deleteRoleMenus(String roleId);
	
	/** 
	 * @Title: deleteRoleCells 
	 * @Description: 清空对应角色的小区权限
	 * @param @param roleId
	 * @param @return     
	 * @return int     
	 * @throws 
	 */
	public int deleteRoleCells(String roleId);
	
	/**
	 * Description: 根据主键删除角色信息
	 * @param roleId 角色id
	 */
	int deleteByPrimaryKey(String roleId);

	/**
	 * @Description 编辑角色时根据roleId取出所有的cellId的集合<br>
	 * 
	 * @param roleId 角色id
	 * @return 
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年4月21日
	 * @see 
	 */
	List<String> getCellIdListByRoleId(String roleId);
	
	/** 
	 * @Title: getCellInfosByRoleId 
	 * @Description: 根据用户的角色信息获取对应所有小区信息
	 * @param @param list 角色ID集合
	 * @param @return     
	 * @return List<CellInfo> 小区信息集合  
	 * @throws 
	 */
	List<CellInfo> getCellInfosByRoleId(List<String> list);

	/**
	 * @Description 插入角色小区表<br>
	 * 
	 * @param roleId 角色id
	 * @param cells 小区集合id
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年4月21日
	 * @see 
	 */
	void updateRoleCell(String roleId, String[] cells);
	
	/**
	 * @Description 根据用户类型获取对应的角色列表<br>
	 * 
	 * @param type 用户类型
	 * @return 返回角色集合
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年4月22日
	 * @see 
	 */
	List<Role> getRoleList(int type,String keyword);
	
	/**
	 * 
	 * @Description 编辑角色时获取到所有叶子菜单的集合<br>
	 * 
	 * @return 
	 * @author lilan 1063972142@qq.com
	 * @date 2016年5月13日
	 * @see
	 */
	List<String> getMenuLeafIdList(String roleId , int system);
	/**
	 * @Description 根据小区id获取角色id集合<br>
	 * 
	 * @param cellId
	 * @return 
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年5月16日
	 * @see 
	 */
	List<String> getRoleListBycellId(String cellId,String userId);
	
	/** 
	 * @Title: getRoleListByPermissioncellId 
	 * @Description: 在用户已有的角色和选择的小区中，取出其中具备所选所有小区权限的角色
	 * @param @param cellId 选择的小区
	 * @param @param roleId 用户的角色范围
	 * @param @return     
	 * @return List<String>   复合条件的角色  
	 * @throws 
	 */
	List<String> getRoleListByPermissioncellId(String []cellId,List<String> roleId);

	/** 
	 * @Title: checkIfRolePermission 
	 * @Description: 判断角色对应的小区和功能是不是这个人都有，这个人是否有权限修改删除这个角色
	 * @param @param roleId 角色ID
	 * @param @return     
	 * @return boolean     
	 * @throws 
	 */
	boolean checkIfRolePermission(String roleId);
	
	/** 
     * @Title: ifCurrAdmin 
     * @Description: 判断当前用户是否为超级管理员
     * @param @return     
     * @return boolean     
     * @throws 
     */
    public boolean ifCurrAdmin();
    
    /**
     * @Description 根据userId取对应的roleId<br>
     * 
     * @param userId 用户id
     * @return 
     * @author yangfan
     * @date 2016年9月7日
     * @see 
     */
    List<RoleUser> getRoleIdByUserId(String userId);

    /**
 	* @Description 查询与小区关联的角色数目
 	* @param cellId 小区id
 	* @return 与小区关联的角色数目
 	* @author liuying 1075817474@qq.com
 	* @date 2016年9月19日
 	* @see 
 	*/
    Integer selectCountByCellId(String cellId);

	/**
	 * @Description 查询多个运营公司id是否被角色引用
	 * @param companyIds 多个公司id
	 * @param userType 用户类型
	 * @return 被引用的数目
	 * @author liuying 1075817474@qq.com
	 * @date 2016年9月19日
	 * @see 
	 */
	Integer selectCountByCompanyId(String[] companyIds, int userType);
}
